import Dep from "./dep.js"

class Watcher {
  constructor (vm, key, cb) {
    this.vm = vm
    this.key = key
    this.cb = cb

    // 把 watcher 对象记录到 Dep 类的静态属性 target
    Dep.target = this
    // 触发 get 方法，在 get 方法中会调用 Dep 实例的 addSub
    this.oldValue = vm[key]
    Dep.target = null
  }

  // 数据变化时触发回调
  update () {
    let newValue = this.vm[this.key]
    if (this.oldValue === newValue) {
      return
    }
    this.cb(newValue)
  }
}

export default Watcher
